package com.angel.helpers
{
	import flash.utils.Dictionary;
	import mx.collections.ArrayCollection;
	import mx.collections.IList;
	
	public class StringUtils
	{
		public function StringUtils()
		{
		}
		
		public static function plainParametersWithDictionary(parameters:Dictionary, parameterSeparatorString:String):String{
			var parametersString:String = "";
			var size: int = (parameters != null )? parameters.length: 0 ;
			for(var key:Object in parameters){
				if(parameters[key] == parameters[size]){
					parametersString += key + "=" + parameters[key];
				} else {
					parametersString += key + "=" + parameters[key] + parameterSeparatorString;
				}
			}			
			return parametersString;
	   	}
	   	
	   	public static function plainParametersWithList(parameters:IList, parameterSeparatorString:String):String{
			var parametersString:String = "";
			var size: int = (parameters != null )? parameters.length: 0 ;
			var i:int = 1;
			for each(var key:String in parameters){
				if(i == 1 && size > 1){
					parametersString += key + parameterSeparatorString;
				} else {
					if(size == 1){
						parametersString += key;
					} else {
						if(i == size){
							parametersString += key;
						} else {
							parametersString += key + parameterSeparatorString;
						}
					}
				}
				i++;
			}			
			return parametersString;
	   	}
	   	  		/**
		 * Pasa a mayusculas la subcadena definida por un rango especifico
		 * en el texto especificado.
		 * 
		 * Ejemplo:
		 * 			StringUtils.toUpperCase("murcielago", 2, 6);
		 * 
		 * Devuelve el texto:
		 *			 muRCIElago
		 * 
		 * @param texto Texto del cual pasar a mayusculas el rango especificado
		 * @param beginIndex Comienzo del rango
		 * @param endIndex Fin del rango
		 */ 
		public static function toUpperCase(texto:String, beginIndex:int, endIndex:int): String {
			var upperCaseText:String = "";
			for(var index:int = 0; index < texto.length; index++) {
				var char:String = null;
				if(index >= beginIndex && index < endIndex) {
					char = texto.charAt(index).toUpperCase();
				} else {
					char = texto.charAt(index);
				}
				upperCaseText += char;
			}
			return upperCaseText; 
		}
		
		  		/**
		 * Pasa a mayusculas la subcadena definida por un rango especifico
		 * en el texto especificado.
		 * 
		 * Ejemplo:
		 * 			StringUtils.toUpperCase("murcielago", 2, 6);
		 * 
		 * Devuelve el texto:
		 *			 muRCIElago
		 * 
		 * @param texto Texto del cual pasar a mayusculas el rango especificado
		 * @param beginIndex Comienzo del rango
		 * @param endIndex Fin del rango
		 */ 
		public static function toLowerCase(texto:String, beginIndex:int, endIndex:int): String {
			var upperCaseText:String = "";
			for(var index:int = 0; index < texto.length; index++) {
				var char:String = null;
				if(index >= beginIndex && index < endIndex) {
					char = texto.charAt(index).toLowerCase();
				} else {
					char = texto.charAt(index);
				}
				upperCaseText += char;
			}
			return upperCaseText; 
		}
	   	
	   	public static function toTitle(text:String): String {
			text = text.toLowerCase();
			
			var array:Array = text.split(" ");
			var result:ArrayCollection = new ArrayCollection();				
			
			for(var index:int; index < array.length; index++) {
				var word:String = array[index];
				
				var newWord:String;
				var resto:String;
				
				newWord = word.charAt(0).toUpperCase();
									
				resto = word.substr(1, word.length-1);					
				newWord = newWord.concat(resto);
				result.addItem(newWord);					
			}
			
			return result.toArray().join(" ");			
		}
		
		/**
		 * Iniciala un texto.
		 * El proceso de inicialacion conciste en llevar a iniciales
		 * todas las palabras del texto.
		 * Por ejemplo, el texto "General Public License", se convertirá
		 * en "G.P.L."
		 * 
		 * @param texto Texto a incialar
		 * @return El texto inicialado
		 */ 
		public static function inicialar(texto:String): String {
			var textoInicialado:String = "";
			if (texto != '') {
				textoInicialado = texto.charAt(0) + ".";
				if (texto.indexOf(" ") > 0) {
					textoInicialado += inicialar(texto.substr(texto.indexOf(" ") + 1));
				}
			}
			return textoInicialado;
		}
	}
}